%% 清空环境
clear; clc; close all;

%% 固定参数
a0 = -2;
a1 = 0.83;
a2 = 0.14;
b0 = 1.3;
b1 = 0.1;
% b2 在本代码中作为参数确定 d2 的计算，因此不固定
d1 = 0;

%% 设定 b2 的取值范围，并根据 b2 计算 d2
b2_values = [-2, -1, 0, 1, 2];          % 五个不同的 b2 值
d2_values = (1 - b1) * pi * b2_values;

% 为每个 d2 分配不同颜色
colors = lines(length(d2_values));

%% 迭代设置
N_total = 3000;   % 总迭代步数，可根据需要调整
N_trans = 500;    % 舍弃瞬态步数
N_show  = N_total - N_trans;

%% 初始状态
x0 = 0.1;
y0 = 0.1;
z0 = 0.1;

%% 创建 3D 图窗
figure;
hold on; box on; grid on;
view(3);
xlabel('x_n','FontSize',12);
ylabel('y_n','FontSize',12);
zlabel('z_n','FontSize',12);
title('随 d_2 改变的切换状态','FontSize',14);

for i = 1:length(d2_values)
    d2_test = d2_values(i);  % 当前 d2 值
    col = colors(i,:);
    
    b2 = 1;
    
    % 先进行瞬态迭代
    x = x0; y = y0; z = z0;
    for n = 1:N_trans
        x_new = x + y;
        y_new = sin(a0 * y^2 * sin(a1 + a2*x)) + b2*sin(z) + d1;
        z_new = b0*y + b1*z + d2_test;
        x = x_new; y = y_new; z = z_new;
    end
    
    % 记录瞬态后的轨迹
    X = zeros(1, N_show);
    Y = zeros(1, N_show);
    Z = zeros(1, N_show);
    for n = 1:N_show
        x_new = x + y;
        y_new = sin(a0 * y^2 * sin(a1 + a2*x)) + b2*sin(z) + d1;
        z_new = b0*y + b1*z + d2_test;
        x = x_new; y = y_new; z = z_new;
        X(n) = x;
        Y(n) = y;
        Z(n) = z;
    end
    
    % 绘制当前 d2 对应的散点图
    scatter3(X, Y, Z, 5, 'MarkerFaceColor', col, 'MarkerEdgeColor', 'none',...
        'DisplayName', sprintf('d_2=%.2f', d2_test));
end

legend('Location','best');

